<?php
/**
 * @fileoverview
 * 用户相关功能的Controller。
 * 本Controller定义了所有与用户相关的功能，包括：
 *   1. 用户登录
 *   2. 查看用户的个人首页
 *   3. 修改个人信息
 *   4. 修改密码
 *   5. 查看所有用户一览
 *   6. 注销
 *   7. 新用户加入申请
 */
class UsersController extends AppController {

	var $name = 'Users';
	var $helpers = array('Html', 'Form', 'Javascript');

	/**
	 * 执行action之前的filter。
	 * 由于这个Controller中的绝大部分功能都需要登录才能使用，
	 * 所以在这类检查用户是否登录，如未登录则跳转到登录界面
	 */
	function beforeFilter() {

		$this->layout = 'private';

		// 除了登录(login)和注册(register)之外的所有action都要求登录
		if (!in_array($this->params['action'], array('login', 'register'))) {
			$this->checkLogin();

		}
	}

	/**
	 * 查看所有的用户。
	 */
	function index() {
		$users = $this->User->findAll();
		$this->set('users', $users);
	}

	/**
	 * 用户个人首页
	 */
	function home() {
		$user = $this->User->findById($this->userId);
		$this->set('user', $user);
		$this->set('perms', $this->userPerms);
	}


	/**
	 * 修改个人信息
	 * @param {int} $id 指定用户的id
	 */
	function edit() {

		// 第一次打开本页面时，读取当前用户信息，并显示表单
		if (empty($this->data)) {
			$this->data = $this->User->read(null, $this->userId);


		// 否则，用户已经点击了提交按钮，下面处理表单
		} else {
		
			$error = '';

			// 将新信息保存到数据库中
			$this->User->save($this->data);

			// 回到用户的主页
			$this->redirect('/users/home/');
			exit;
		}
	}


	/**
	 * 修改密码
	 * @param {int} $id 指定用户的id
	 */
	function changepass() {

		if (!empty($this->data)) {

			$error = '';

			// 获取用户输入的密码信息
			$oldpassword = $this->data['User']['oldpassword'];
			$password1 = $this->data['User']['password1'];
			$password2 = $this->data['User']['password2'];

			// 验证旧密码是否正确
			$user = $this->User->auth($this->userId, $oldpassword);
			if ($user) {
				$error = '密码不正确';
			} else if ($password1 != $password2) {
				$error = '两次输入的新密码不一致';
			} else {
				$user['User']['password'] = md5($password1);
				$user['User']['id'] = $this->userId;
				$this->User->save($user, true, array('password'));

				// 重定向到用户的主页
				$this->redirect('/users/home/');
			}
		}
	}

	/**
	 * 用户登录
	 */
	function login() {

		$this->set('error', false);

		// 用户单击了登录按钮之后处理数据
		if (!empty($this->data)) {

			// 获取用户输入的邮件地址和密码
			$email = $this->data['User']['email'];
			$password = $this->data['User']['password'];

			// 验证用户密码是否正确
			$user = $this->User->auth($email, $password);

			if ($user) {
				// 登录成功，设置用户的最终登录时间
				$user['User']['lastlogin'] = date('Y-m-d H:i:s');
				$this->User->save($user, TRUE, array('lastlogin'));

				// 在Session中记录登录用户的ID和用户权限
				$this->Session->write('LOGIN_USERID', $user['User']['id']);
				$this->Session->write('LOGIN_USERPERM', $user['User']['perm']);

				// 跳转到用户的个人首页
				$this->redirect('/users/home/');
			} else {
				$this->set('error', true);
			}
		}
	}

	/**
	 * 用户注销
	 */
	function logout() {

		// 直接销毁session即可
		$this->Session->destroy();

		// 然后跳转到网站首页
		$this->redirect('/');
	}

	/**
	 * 用户注册
	 * 用户注册需要至少两名成员进行认证才能通过
	 */
	function register() {

		if (!empty($this->data)) {

			// 填写其他注册表单中没有写出的部分
			array_merge($this->data['User'], array(
				'nickname'	=> '',
				'feedurl'	=> '',
				'perm'		=> 0,
			));

			// 将用户输入的内容保存到数据库中
			if ($this->User->save($this->data)) {

				// 并设置注册成功标志
				$this->set('success', TRUE);
			}
		}
	}


	/**
	 * 列出所有等待审核的用户
	 */
	function listapply() {

		$users = $this->User->findAll('User.perm=0');
		$this->set('users', $users);
	}
}
?>
